import useStorage from "@/plugin/useStorage.ts";

/**
 * 防抖
 * @param fn
 * @param delay 时间间隔
 */
export let useDebounce = (fn: any, delay: number = 200) => {
  let timer: any;
  // 闭包
  return (...args: any[]) => {
    // 如果不是剪头函数可以使用arguments获取参数，这样就不用写形参了考虑形参个数了
    // let args = arguments;
    // 判断还在定时，说明当前正在一个计时过程中，并且又触发了相同事件。所以要取消当前的计时，重新开始计时
    if (timer) {
      clearTimeout(timer);
    }
    timer = setTimeout(() => {
      timer = null;
      return fn(...args);
    }, delay);
  };
};

/**
 * 节流
 * @param func
 * @param delay 时间间隔
 */
export let useThrottle = (func: any, delay: number = 200) => {
  // 第一次触发时间戳
  let startTime = Date.now();
  return (...args: any[]) => {
    // 如果不是剪头函数可以使用arguments获取参数，这样就不用写形参了考虑形参个数了
    // let args = arguments;
    // 再次触发时间
    let curTime = Date.now();
    // 间隔时间 = 延迟的时间 - （再次触发时间戳 - 第一次触发时间戳）
    let interval = delay - (curTime - startTime);
    if (interval <= 0) {
      // 重新计算开始时间
      startTime = Date.now();
      return func(...args);
    }
  };
};

/**
 * 生成随机字符串
 * @param len 
 * @param number 
 * @returns 
 */
export const getRandom = (len: number, number?: boolean) => {
  let chars: string = 'ABCDEFGHMNPQRSTWUXYZabcdefghmnpqrstwuxyz1234567890';
  if (number) {
      chars = '0123456789';
  }
  let maxPos: number = chars.length;
  if (!len) {
      len = 16
  }
  let hash = '';
  for (let i = 0; i < len; i++) {
      hash += chars.charAt(Math.floor(Math.random() * maxPos));
  }
  return hash
}
/**
* 生成区间内随机数
* @param start 
* @param end 
* @returns 
*/
export const randomNumber = (start: number, end: number) => {
  return Math.round(Math.random() * (end - start) + start);
}

/**
* 生成订单编号
* @returns 
*/
export const nid = () => {
  let time = new Date().getTime()
  return time + getRandom(5,true)
}
/**
* 数据校验对比
* @param a
* @param b
*/
export const compare = (a: string, b: string) => {
  return a.toLowerCase() === b.toLowerCase()
}

/**
* 金额格式化
* @param v
*/
export const moneyFormat = (v: any) => {
  return `${v}`.replace(/\d{1,3}(?=(\d{3})+$)/g, (s) => `${s},`)
}